/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.dwh.trigger;

import java.util.ArrayList;

/**
 * Se encarga de obtener los valores de los parametro del archivo de configuracion.
 * Puede devulver el valor de un parametro como una cadena, entero o
 * un arreglo de cadenas.
 * @author Jose Carlos Palma
 * @version v1.0
 */
public class Conf {

    

    /**
     * Devuelve el valor del parametro.
     * @param key es el parametro.
     * @return el valor del parametro.
     */
    public static String get(String key) {
        return System.getProperty(key).trim();
    }

    /**
     * Devuelve el valor de parametro, en caso que no exista devuelve el 
     * valor por defecto.
     * @param key es el parametro.
     * @param valorDefecto es el valor por defecto.
     * @return el valor del parametro.
     */
    public static String get(String key, String valorDefecto) {
        return System.getProperty(key, valorDefecto).trim();
    }

    /**
     * Devuelve el valor del parametro como entero.
     * @param key es el parametro.
     * @return el valor del parametro.
     */
    public static int getInt(String key) {
        int retVal = -1;
        try {
            retVal = Integer.parseInt(System.getProperty(key).trim());
        } catch (Exception ex) {
        }
        return retVal;
    }

    /**
     * Devuelve el valor del parametro como entero.
     * @param key es el parametro.
     * @param valorDefecto es el valor por defecto.
     * @return el valor del parametro.
     */
    public static int getInt(String key, int valorDefecto) {
        int retVal = valorDefecto;
        try {
            retVal = Integer.parseInt(System.getProperty(key).trim());
        } catch (Exception ex) {
        }
        return retVal;
    }

    /**
     * Devuelve el valor en forma de arreglo, utilizando como separador al parametro
     * sep.
     * @param key es el parametro.
     * @param sep es la caracter de separador.
     * @return el valor del parametro como un arreglo.
     */
    public static String[] getArray(String key, String sep) {
        return get(key).split(sep);
    }

    /**
     * Devuelve el valor en forma de arreglo, utilizando como separador al parametro
     * sep.
     * @param key es el parametro.
     * @return el valor del parametro como un arreglo.
     */
    public static String[] getArray(String key) {
        return get(key).split(",");
    }

    /**
     * Devuelve una lista de informacion de las colas.
     * @return una lista de QueueInfo.
     * @see org.dwh.trigger.QueueInfo
     */
    public static ArrayList<QueueInfo> getQueuesInfo() {
        ArrayList<QueueInfo> retVal = new ArrayList<QueueInfo>();

        for (String key : System.getProperties().stringPropertyNames()) {
            String queueKey = key.toLowerCase();
            if (!queueKey.matches("queue[\\.][a-zA-Z0-9]+[\\.]name")) {
                continue;
            }
            String queueName = System.getProperty(queueKey);
            String queueStatus = System.getProperty(queueKey.replaceAll("name", "status").toLowerCase());
            String queueIp = System.getProperty(queueKey.replaceAll("name", "ip"));
            String queuePort = System.getProperty(queueKey.replaceAll("name", "port"));
            String queueTriggers = System.getProperty(queueKey.replaceAll("name", "triggers"));
            QueueInfo q = new QueueInfo(queueKey, queueName, queueStatus, queueIp, Integer.parseInt(queuePort), queueTriggers);
            retVal.add(q);

        }
        return retVal;
    }

    /**
     * Devuelve una lista de informacion de las SLUs.
     * @return una lista de SLUInfo.
     * @see org.dwh.trigger.SLUInfo
     */
    public static ArrayList<SLUInfo> getSLUsInfo() {
        ArrayList<SLUInfo> retVal = new ArrayList<SLUInfo>();

        for (String key : System.getProperties().stringPropertyNames()) {
            String sluKey = key.toLowerCase();
            if (!sluKey.matches("slu[\\.]slu[0-9]+[\\.]name")) {
                continue;
            }
            String sluName = System.getProperty(sluKey);
            String sluStatus = System.getProperty(sluKey.replaceAll("name", "status").toLowerCase());
            String sluIp = System.getProperty(sluKey.replaceAll("name", "ip"));
            String sluSDP = System.getProperty(sluKey.replaceAll("name", "sdp"));
            SLUInfo slu = new SLUInfo(sluKey, sluName, sluStatus, sluIp, sluSDP);
            retVal.add(slu);
        }

        return retVal;
    }
}
